package cz.vse.adventura.po1715.xburj54_bursa.hra;

import cz.vse.adventura.po1715.xburj54_bursa.hra.Kapsa;
import cz.vse.adventura.po1715.xburj54_bursa.hra.APříkaz;
import cz.vse.adventura.po1715.xburj54_bursa.hra.HraLupič;


/*******************************************************************************
 * Instance tridy {@code PříkazPolož} predstavuje prikaz
 * k vyjmuti predmetu z kapes a jeho umisteni v aktualni mistnosti.
 * Aby byl prikaz proveden, musi byt zadan nazev predmetu
 * a predmet zadaneho nazvu musi byt aktualne v kapsách.
 *
 * @author Jan Bursa
 * @version 1.02,  16.12.2010
 */
public class PříkazPolož extends APříkaz
{
//== KONSTANTNI ATRIBUTY TRIDY =================================================
//== PROMENNE ATRIBUTY TRIDY ===================================================
//== KONSTANTNI ATRIBUTY INSTANCI ==============================================
//== PROMENNE ATRIBUTY INSTANCI ================================================
//== NESOUKROME METODY TRIDY ===================================================

//##############################################################################
//== KONSTRUKTORY A TOVARNI METODY =============================================

    /***************************************************************************
     * Vytvori prikaz, po jehoz zadani se hrac pokusí položit zadaný předmět.
     * Tento předmět musí být v daném okamžiku v kapsách.
     */
    PříkazPolož()
    {
        super("Polož",
           "Příkaz vyjme předmět z kapes a odloží jej v aktuální místnosti.\n"+
           "Aby byl příkaz proveden, musí byt zadán název předmětu a předmět zadaného názvu musí byt aktuálně v kapsách.");
    }


//== ABSTRAKTNI METODY =========================================================
//== NESOUKROME METODY INSTANCI ================================================

    /***************************************************************************
     * Pokusi se vyjmout z kapes a polozit v mistnosti predmet zadaneho nazvu;
     * před tím však zkontroluje, je-li zadán předmět, který se má položit,
     * a je-li tento předmět v kapsách.
     *
     * @param  parametry Nazev pokladaneho predmetu
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if( (parametry != null)      &&
            (parametry.length > 0) )
        {
            String   nazev   = parametry[0];
            HraLupič      hra     = HraLupič.getHra();
            Kapsa    kapsa   = (Kapsa) hra.getBag();
            Předmět  predmet = kapsa.vyjmi( nazev );
            if( predmet == null ) {
            return "Předmět není v kapse: " + nazev;   //==========>
            }
            Místnost am = Místnost.getAktuálníMístnost();
            am.poloz( predmet );
            return "Položil(a) jste předmět: " + predmet.getName();
        }                                                   //==========>
            return "Je třeba zadat název pokládaného předmětu"; //==========>
    }


//== SOUKROME A POMOCNE METODY TRIDY ===========================================
//== SOUKROME A POMOCNE METODY INSTANCI ========================================
//== VNORENE A VNITRNI TRIDY ===================================================
//== TESTY A METODA MAIN =======================================================
}
